++++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////////////++++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////////////++++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////////////++++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////////////++++++++++++++++++++++++++##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////////////++++++++++++++++++++++++++##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////////////++++++++++++++++++++++++++##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////////////++++++++++++++++++++++++++##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////////////++++++++++++++++++++++++##############''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////////++++++++++++++++++++++++##############''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////////++++++++++++++++++++++++##############''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////////++++++++++++++++++++++++##############''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////////++++++++++++++++++++++##################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////////++++++++++++++++++++++##################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////////++++++++++++++++++++++##################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////////++++++++++++++++++++++##################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////////++++++++++++++++++++######################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////++++++++++++++++++++######################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////++++++++++++++++++++######################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////++++++++++++++++++++######################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////////++++++++++++++++++##########################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////++++++++++++++++++##########################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////++++++++++++++++++##########################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////++++++++++++++++++##########################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////////++++++++++++++++##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////++++++++++++++++##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////++++++++++++++++##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////++++++++++++++++##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////////++++++++++++++##################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////++++++++++++++##################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////++++++++++++++##################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////++++++++++++++##################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////////++++++++++++####++''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////++++++++++++####++''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////++++++++++++####++''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////++++++++++++####++''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////////++++++++++####++++''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////++++++++++####++++''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////++++++++++####++++''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////++++++++++####++++''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////////++++++++####++++++''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////++++++++####++++++''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////++++++++####++++++''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////++++++++####++++++''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////////++++++####++++++++''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////++++++####++++++++''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////++++++####++++++++''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////++++++####++++++++''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//////++++####++++++++++''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////++++####++++++++++''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////++++####++++++++++''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////++++####++++++++++''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######////++####++++++++++++''''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//++####++++++++++++''''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//++####++++++++++++''''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//++####++++++++++++''''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######//####++++++++++++++''''''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########++++++++++++++''''''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########++++++++++++++''''''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########++++++++++++++''''''''''''''##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########//////////////++++++++++++++################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////////////++++++++++++++################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////////////++++++++++++++################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////////////++++++++++++++################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########////////////++++++++++++####################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////////////++++++++++++####################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////////////++++++++++++####################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////////////++++++++++++####################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########//////////++++++++++################################%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////////++++++++++################################%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////////++++++++++################################%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////////++++++++++################################%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++########////////++++++++################################%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////////++++++++################################%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////////++++++++################################%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////////++++++++################################%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++########//////++++++################################%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////++++++################################%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////++++++################################%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//////++++++################################%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++########////++++################################%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////++++################################%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////++++################################%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########////++++################################%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++########//++################################%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//++################################%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//++################################%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########//++################################%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++########################################%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########################################%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########################################%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########################################%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++####################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++########################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########################''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############################''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################################''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################################''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%##########################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%##########################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%##########################################''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%%%%%##########################################''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%##################################''++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%##################################''++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%##################################''++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%%%%%##################################''++########''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%##################################''''++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%##################################''''++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%##################################''''++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%%%%%##################################''''++++########''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%##################################''''''++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%##################################''''''++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%##################################''''''++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%%%%%##################################''''''++++++########''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%##################################''''''''++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%##################################''''''''++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%##################################''''''''++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%%%%%##################################''''''''++++++++########''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%##################################''''''''''++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%##################################''''''''''++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%##################################''''''''''++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##%%%%##################################''''''''''++++++++++########''''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################################''''''''''''++++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################################''''''''''''++++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################################''''''''''''++++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++####################################''''''''''''++++++++++++##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################################''''''''''''''++++++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################################''''''''''''''++++++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################################''''''''''''''++++++++++++++########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++################################''''''''''''''++++++++++++++##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++++++//////////////##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++++++//////////////##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++++++//////////////##########''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++++++//////////////############''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++++////////////####''++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++++////////////####''++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++++////////////####''++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++++////////////####''++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++//////////####''''++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++//////////####''''++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++//////////####''''++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++++//////////####''''++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++////////####''''''++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++////////####''''''++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++////////####''''''++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++++////////####''''''++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++//////####''''''''++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++//////####''''''''++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++//////####''''''''++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++++//////####''''''''++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++////####''''''''''++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++////####''''''''''++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++////####''''''''''++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++++////####''''''''''++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++//####''''''''''''++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++//####''''''''''''++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++//####''''''''''''++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################++//####''''''''''''++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##################################''''''''''''''++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##################################''''''''''''''++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##################################''''''''''''''++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##################################''''''''''''''++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################''''''''''''''''++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################''''''''''''''''++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################''''''''''''''''++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############################''''''''''''''''++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########################''''''''''''''''''++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########################''''''''''''''''''++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########################''''''''''''''''''++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########################''''''''''''''''''++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######################''''''''''''''''''''++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######################''''''''''''''''''''++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######################''''''''''''''''''''++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######################''''''''''''''''''''++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##################''''''''''''''''''''''++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##################''''''''''''''''''''''++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##################''''''''''''''''''''''++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##################''''''''''''''''''''''++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############''''''''''''''''''''''''++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############''''''''''''''''''''''''++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############''''''''''''''''''''''''++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##############''''''''''''''''''''''''++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########''''''''''''''''''''''''''++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########''''''''''''''''''''''''''++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########''''''''''''''''''''''''''++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++##########''''''''''''''''''''''''''++++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######''''''''''''''''''''''''''''++++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######''''''''''''''''''''''''''''++++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######''''''''''''''''''''''''''''++++++++++++++++++++++++++++######''''''''''''''''''''''''''''''++++++++++++++++++++++++++++++######''''''''''''''''''''''''''''++//////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++++////////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++++////////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++++////////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++++//////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##########++++++++++++++++++++++++++//////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##########++++++++++++++++++++++++++//////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##########++++++++++++++++++++++++++//////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##########++++++++++++++++++++++++++////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##############++++++++++++++++++++++++////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##############++++++++++++++++++++++++////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##############++++++++++++++++++++++++////////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##############++++++++++++++++++++++++//////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##################++++++++++++++++++++++//////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##################++++++++++++++++++++++//////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##################++++++++++++++++++++++//////////////////////######++++++++++++++++++++++++++++++//////////////////////////////##################++++++++++++++++++++++////////////////////######++++++++++++++++++++++++++++++//////////////////////////////######################++++++++++++++++++++////////////////////######++++++++++++++++++++++++++++++//////////////////////////////######################++++++++++++++++++++////////////////////######++++++++++++++++++++++++++++++//////////////////////////////######################++++++++++++++++++++////////////////////######++++++++++++++++++++++++++++++//////////////////////////////######################++++++++++++++++++++//////////////////######++++++++++++++++++++++++++++++//////////////////////////////##########################++++++++++++++++++//////////////////######++++++++++++++++++++++++++++++//////////////////////////////##########################++++++++++++++++++//////////////////######++++++++++++++++++++++++++++++//////////////////////////////##########################++++++++++++++++++//////////////////######++++++++++++++++++++++++++++++//////////////////////////////##########################++++++++++++++++++////////////////######++++++++++++++++++++++++++++++//////////////////////////////##############################++++++++++++++++////////////////######++++++++++++++++++++++++++++++//////////////////////////////##############################++++++++++++++++////////////////######++++++++++++++++++++++++++++++//////////////////////////////##############################++++++++++++++++////////////////######++++++++++++++++++++++++++++++//////////////////////////////##############################++++++++++++++++//////////////######++++++++++++++++++++++++++++++//////////////////////////////##################################++++++++++++++//////////////######++++++++++++++++++++++++++++++//////////////////////////////##################################++++++++++++++//////////////######++++++++++++++++++++++++++++++//////////////////////////////##################################++++++++++++++//////////////######++++++++++++++++++++++++++++++//////////////////////////////##################################++++++++++++++////////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''++####++++++++++++////////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''++####++++++++++++////////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''++####++++++++++++////////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''++####++++++++++++//////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''++++####++++++++++//////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''++++####++++++++++//////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''++++####++++++++++//////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''++++####++++++++++////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''++++++####++++++++////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''++++++####++++++++////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''++++++####++++++++////////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''++++++####++++++++//////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''++++++++####++++++//////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''++++++++####++++++//////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''++++++++####++++++//////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''++++++++####++++++////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''++++++++++####++++////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''++++++++++####++++////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''++++++++++####++++////######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''++++++++++####++++//######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''''++++++++++++####++//######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''''++++++++++++####++//######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''''++++++++++++####++//######++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''''++++++++++++####++//####++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''''''++++++++++++++##########++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''''''++++++++++++++##########++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''''''++++++++++++++##########++++++++++++++++++++++++++++++//////////////////////////////##############################''''''''''''''++++++++++++++########++++++++++++++++++++++++++++++//////////////////////////////################################++++++++++++++//////////////########++++++++++++++++++++++++++++++//////////////////////////////################################++++++++++++++//////////////########++++++++++++++++++++++++++++++//////////////////////////////################################++++++++++++++//////////////########++++++++++++++++++++++++++++++//////////////////////////////################################++++++++++++++//////////////######++++++++++++++++++++++++++++++//////////////////////////////####################################++++++++++++////////////########++++++++++++++++++++++++++++++//////////////////////////////####################################++++++++++++////////////########++++++++++++++++++++++++++++++//////////////////////////////####################################++++++++++++////////////########++++++++++++++++++++++++++++++//////////////////////////////####################################++++++++++++////////////########++++++++++++++++++++++++++++//////////////////////////////##%%%%%%################################++++++++++//////////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%################################++++++++++//////////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%################################++++++++++//////////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%################################++++++++++//////////########++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%################################++++++++////////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%################################++++++++////////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%################################++++++++////////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%################################++++++++////////########++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%################################++++++//////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%################################++++++//////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%################################++++++//////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%################################++++++//////########++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%################################++++////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%################################++++////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%################################++++////########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%################################++++////########++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%################################++//########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%################################++//########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%################################++//########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%################################++//########++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%########################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%########################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%########################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%########################################++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####################################++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################################++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############################++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########################++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####################++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////########################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////####################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////####################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////########################################%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########################################%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########################################%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########################################%%%%%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////########++''################################%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++''################################%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++''################################%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++''################################%%%%%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////########++++''''################################%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++''''################################%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++''''################################%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++''''################################%%%%%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////########++++++''''''################################%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++''''''################################%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++''''''################################%%%%%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++''''''################################%%%%%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////########++++++++''''''''################################%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++++''''''''################################%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++++''''''''################################%%%%%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++++''''''''################################%%%%%%%%####++++++++++++++++++++++++++++++////////////////////////////########++++++++++''''''''''################################%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++++++''''''''''################################%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++++++''''''''''################################%%%%####++++++++++++++++++++++++++++++//////////////////////////////########++++++++++''''''''''################################%%%%####++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++''''''''''''####################################++++++++++++++++++++++++++++++//////////////////////////////########++++++++++++''''''''''''####################################++++++++++++++++++++++++++++++//////////////////////////////########++++++++++++''''''''''''####################################++++++++++++++++++++++++++++++//////////////////////////////########++++++++++++''''''''''''####################################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++''''''''''''''################################++++++++++++++++++++++++++++++//////////////////////////////########++++++++++++++''''''''''''''################################++++++++++++++++++++++++++++++//////////////////////////////########++++++++++++++''''''''''''''################################++++++++++++++++++++++++++++++//////////////////////////////########++++++++++++++''''''''''''''################################++++++++++++++++++++++++++++++//////////////////////////////########//////////////++++++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////##########//////////////++++++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////##########//////////////++++++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////##########//////////////++++++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######''####////////////++++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++''####////////////++++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++''####////////////++++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++''####////////////++++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++''''####//////////++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++''''####//////////++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++''''####//////////++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++''''####//////////++++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++''''''####////////++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++''''''####////////++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++''''''####////////++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++''''''####////////++++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++''''''''####//////++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++''''''''####//////++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++''''''''####//////++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++''''''''####//////++++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++''''''''''####////++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++''''''''''####////++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++''''''''''####////++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++''''''''''####////++++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++''''''''''''####//++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++''''''''''''####//++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++''''''''''''####//++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++''''''''''''####//++##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++''''''''''''''##################################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++''''''''''''''##################################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++''''''''''''''##################################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++''''''''''''''##################################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++''''''''''''''''##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++''''''''''''''''##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++''''''''''''''''##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++''''''''''''''''##############################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++''''''''''''''''''##########################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++''''''''''''''''''##########################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++''''''''''''''''''##########################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++''''''''''''''''''##########################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++''''''''''''''''''''######################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++''''''''''''''''''''######################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++''''''''''''''''''''######################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++''''''''''''''''''''######################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++''''''''''''''''''''''##################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++''''''''''''''''''''''##################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++''''''''''''''''''''''##################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++''''''''''''''''''''''##################++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++''''''''''''''''''''''''##############++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++''''''''''''''''''''''''##############++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++''''''''''''''''''''''''##############++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++''''''''''''''''''''''''##############++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++''''''''''''''''''''''''''##########++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++''''''''''''''''''''''''''##########++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++''''''''''''''''''''''''''##########++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++''''''''''''''''''''''''''##########++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++''''''''''''''''''''''''''''######++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++++''''''''''''''''''''''''''''######++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++++''''''''''''''''''''''''''''######++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++++''''''''''''''''''''''''''''######++++++++++++++++++++++++++++++//////////////////////////////######++++++++++++++++++++++++++++